From 2a7916e953aa1231b709510d0bf081119cf097c0 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Thu, 30 Nov 2006 17:47:50 +0000 Subject: [PATCH] [QEMU] Do shift-key processing in QEMU monitor terminal when connected via VNC. Signed-off-by: Daniel P. Berrange --- tools/ioemu/vnc.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/ioemu/vnc.c b/tools/ioemu/vnc.c index 631754ca03..86d3720f90 100644 --- a/tools/ioemu/vnc.c +++ b/tools/ioemu/vnc.c @@ -114,6 +114,7 @@ struct VncState int visible_h; int ctl_keys; /* Ctrl+Alt starts calibration */ + int shift_keys; /* Shift / CapsLock keys */ }; #define DIRTY_PIXEL_BITS 64 @@ -870,9 +871,12 @@ static void do_key_event(VncState *vs, int down, uint32_t sym) } else if (down) { int qemu_keysym = 0; - if (sym <= 128) /* normal ascii */ + if (sym <= 128) { /* normal ascii */ + int shifted = vs->shift_keys == 1 || vs->shift_keys == 2; qemu_keysym = sym; - else { + if (sym >= 'a' && sym <= 'z' && shifted) + qemu_keysym -= 'a' - 'A'; + } else { switch (sym) { case XK_Up: qemu_keysym = QEMU_KEY_UP; break; case XK_Down: qemu_keysym = QEMU_KEY_DOWN; break; @@ -903,6 +907,10 @@ static void do_key_event(VncState *vs, int down, uint32_t sym) vs->ctl_keys |= 2; break; + case XK_Shift_L: + vs->shift_keys |= 1; + break; + default: break; } @@ -916,6 +924,14 @@ static void do_key_event(VncState *vs, int down, uint32_t sym) vs->ctl_keys &= ~2; break; + case XK_Shift_L: + vs->shift_keys &= ~1; + break; + + case XK_Caps_Lock: + vs->shift_keys ^= 2; + break; + case XK_1 ... XK_9: if ((vs->ctl_keys & 3) != 3) break; -- 2.30.2